package com.zpark.transaction.api.service;

import com.zpark.jushanpay.common.domain.BusinessException;
import com.zpark.transaction.api.dto.PayChannelDTO;
import com.zpark.transaction.api.dto.PayChannelParamDTO;
import com.zpark.transaction.api.dto.PlatformChannelDTO;

import java.util.List;

/**
 * 支付渠道业务层接口
 *      支付渠道服务 管理平台支付渠道，原始支付渠道，以及相关配置
 */
public interface IPayChannelService {

    /**
     * 查询所有平台服务类型数据
     * @return
     * @throws BusinessException
     */
    List<PlatformChannelDTO> queryPlatformChannelAll() throws BusinessException;

    /**
     * 应用绑定平台服务类型
     * @param appId 应用的appId
     * @param platformChannelCode 平台服务类型编码
     * @throws BusinessException
     */
    void bindPlatformChannelForApp(String appId, String platformChannelCode) throws BusinessException;

    /**
     * 查询应用与平台支付渠道类型是否绑定
     * @param appId 应用appId
     * @param platformChannelCode 应用平台支付渠道类型编码
     * @return
     * @throws BusinessException
     */
    Integer queryAppBindPlatformChannel(String appId, String platformChannelCode) throws BusinessException;

    /**
     * 根据平台服务类型编码查询原始支付渠道数据
     * @param platformChannelCode 平台服务类型编码
     * @return
     * @throws BusinessException
     */
    List<PayChannelDTO> queryPayChannelByPlatformChannel(String platformChannelCode) throws BusinessException;

    /**
     * 保存支付渠道参数配置
     * @param dto 支付渠道参数对象
     * @throws BusinessException
     */
    void savePayChannelParam(PayChannelParamDTO dto) throws BusinessException;

    /**
     * 根据应用的appId和平台服务类型编码查询原始支付渠道参数配置数据
     * @param appId 应用的appId
     * @param platformChannelCode 平台服务类型编码
     * @return
     * @throws BusinessException
     */
    List<PayChannelParamDTO> queryPayChannelParamByAppAndPlatform(String appId, String platformChannelCode) throws BusinessException;


    /**
     * 根据应用的appId和平台服务类型编码以及原始支付渠道编码查询原始支付渠道参数配置数据
     * @param appId 应用的appId
     * @param platformChannelCode 平台服务类型编码
     * @param payChannel 原始支付渠道编码
     * @return
     * @throws BusinessException
     */
    PayChannelParamDTO queryPayChannelParamByAppAndPlatform(String appId, String platformChannelCode, String payChannel) throws BusinessException;

}
